package modelo;

import java.util.Date;
import java.util.List;
import modelo.reglas.Specificable;

public class OrdenDeCompra extends Specificable {
	private Date fechaOrden;
	private String diaDeLaSemana;
	private String formaDePago;
	private String banco;
	private String tipoDeCliente;

	private List<Producto> productos;

	public OrdenDeCompra() {
	}

	// TODO quitar el dia de la semana... para que tenes la fecha??
	public OrdenDeCompra(List<Producto> productos, Date fechaOrden,
			String forma_de_pago, String banco, String diaDeLaSemana,
			String tipoCliente) {
		this.productos = productos;
		this.fechaOrden = fechaOrden;
		this.formaDePago = forma_de_pago;
		this.banco = banco;
		this.diaDeLaSemana = diaDeLaSemana;
		this.tipoDeCliente = tipoCliente;
	}

	public String getTipoDeCliente() {
		return tipoDeCliente;
	}

	public Date getFechaOrden() {
		return fechaOrden;
	}

	public String getFormaDePago() {
		return formaDePago;
	}

	public String getBanco() {
		return banco;
	}

	public String getDiaDeLaSemana() {
		return diaDeLaSemana;
	}

	public List<Producto> getProductos() {
		return productos;
	}

	@Override
	public int compareTo(Specificable o) {
		if (o instanceof OrdenDeCompra) {
			OrdenDeCompra orden = (OrdenDeCompra) o;
			if (orden.productos.size() - this.productos.size() != 0) {
				return -1;
			}

			return fechaOrden.compareTo(orden.fechaOrden);
		}
		return -1;
	}

	@Override
	public boolean equals(Object obj) {
		if (obj instanceof OrdenDeCompra) {
			OrdenDeCompra p = (OrdenDeCompra) obj;

			return fechaOrden.equals(p.fechaOrden)
					&& diaDeLaSemana.equals(p.diaDeLaSemana)
					&& formaDePago.equals(p.formaDePago)
					&& banco.equals(p.banco)
					&& tipoDeCliente.equals(p.tipoDeCliente)
					&& productos.containsAll(p.productos);
		}
		return false;
	}

}